#ifndef _core_math_scalar_product_hpp_
#define _core_math_scalar_product_hpp_

/** \file scalar_product.hpp Defines the scalar_product template method which can work with scalars and vectors of static or dynamic dimension.
 *  \author Adrian Schweizer
 *  \date   8.7.2007
 */

#include "detail/scalar_product_impl.hpp"

namespace core {

    namespace math {

        template<class T>
            typename field<T>::type   scalar_product(const T& v0, const T& v1)
            {
                typedef typename detail::choose_scalar_product_impl<T>::type impl_type;
                return impl_type::eval(v0,v1);
            }
        } //namespace math

} // namespace core

#endif // _core_math_scalar_product_hpp_
